// MCKit
// Copyright (c) 2010, Hz Systems LLC
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//	•Redistributions of source code must retain the above copyright notice,
//	 this list of conditions and the following disclaimer.
//	•Redistributions in binary form must reproduce the above copyright notice,
//	 this list of conditions and the following disclaimer in the documentation and/or
//	 other materials provided with the distribution.
//	•Neither the name of Aquatic nor the names of its contributors may be used to 
//	 endorse or promote products derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#import <MCKit/NBTTag.h>
#import "MCEnvEditAppDelegate.h"

@implementation MCEnvEditAppDelegate

@synthesize window;

-(void)loadWorld:(NSString*)worldName
{
	NSString *worldPath = [worlds objectForKey:worldName];
	NBTData *nbtData = [[NBTData alloc] initWithFile:[worldPath stringByAppendingString:@"/level.dat"]];
	if(!nbtData)
		return;
	
	
	[envRootTag release];
	envRootTag = [nbtData readTag];
	envDataTag = [envRootTag tagWithName:@"Data"];	

	
	NBTLongTag *gameTimeTag  = [envDataTag tagWithName:@"Time"];
	[gameTimeField setIntValue:[((NSNumber*)gameTimeTag.value) longLongValue]];
	
	NBTLongTag *lastPlayedTag  = [envDataTag tagWithName:@"LastPlayed"];
	[lastPlayedField setIntValue:[((NSNumber*)lastPlayedTag.value) longLongValue]];
	
	NBTLongTag *sizeOnDiskTag  = [envDataTag tagWithName:@"SizeOnDisk"];
	[sizeOnDiskField setIntValue:[((NSNumber*)sizeOnDiskTag.value) longLongValue]];
	
	NBTLongTag *randomSeedTag  = [envDataTag tagWithName:@"RandomSeed"];
	[randomSeedField setIntValue:[((NSNumber*)randomSeedTag.value) longLongValue]];
	
	
	NBTIntTag *spawnX = [envDataTag tagWithName:@"SpawnX"];
	[spawnXField setIntValue:[((NSNumber*)spawnX.value) longValue]];
	
	NBTIntTag *spawnY = [envDataTag tagWithName:@"SpawnY"];
	[spawnYField setIntValue:[((NSNumber*)spawnY.value) longValue]];
	
	NBTIntTag *spawnZ = [envDataTag tagWithName:@"SpawnZ"];
	[spawnZField setIntValue:[((NSNumber*)spawnZ.value) longValue]];
	
	NBTByteTag *snowTag = [envDataTag tagWithName:@"SnowCovered"];
	[snowButton setState:[((NSNumber*)snowTag.value) boolValue]];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
	worlds = [[NSMutableDictionary alloc] initWithCapacity:0];
	[worldMenu removeAllItems];
	
	
	NSString *rootPath = [@"~/Library/Application Support/minecraft/saves" stringByExpandingTildeInPath];
	NSArray* files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:rootPath error:NULL];
	for(NSString *fileName in files)
	{
		NSString *fullFilePath = [rootPath stringByAppendingPathComponent:fileName];
		
		BOOL isDir = NO;
		if(![[NSFileManager defaultManager] fileExistsAtPath:fullFilePath isDirectory:&isDir] || !isDir)
			continue;
		
		[worlds setObject:fullFilePath forKey:fileName];
		[worldMenu addItemWithTitle:fileName];
	}
	
	[self worldMenuChanged:nil];
}

-(IBAction)worldMenuChanged:(id)sender
{
	[self loadWorld:[worldMenu titleOfSelectedItem]];
}

-(IBAction)gameTimeFieldChanged:(id)sender
{
	((NBTIntTag*)[envDataTag tagWithName:@"Time"]).value = [NSNumber numberWithLongLong:[gameTimeField intValue]];
}

-(IBAction)spawnXFieldChanged:(id)sender
{
	((NBTIntTag*)[envDataTag tagWithName:@"SpawnX"]).value = [NSNumber numberWithInt:[spawnXField intValue]];
}

-(IBAction)spawnYFieldChanged:(id)sender
{
	((NBTIntTag*)[envDataTag tagWithName:@"SpawnY"]).value = [NSNumber numberWithInt:[spawnYField intValue]];
}

-(IBAction)spawnZFieldChanged:(id)sender
{
	((NBTIntTag*)[envDataTag tagWithName:@"SpawnZ"]).value = [NSNumber numberWithInt:[spawnZField intValue]];
}

-(IBAction)snowButtonChanged:(id)sender
{
	((NBTByteTag*)[envDataTag tagWithName:@"SnowCovered"]).value = [NSNumber numberWithInt:[snowButton intValue]];
}

-(IBAction)saveButtonClicked:(id)sender
{
	NSString *worldPath = [worlds objectForKey:[worldMenu titleOfSelectedItem]];
	[envRootTag writeToFile:[worldPath stringByAppendingString:@"/level.dat"]];
}

@end
